/**
 * 字符串拼接工具
 */
class StringBuilder {
    ret: any[];

    constructor() {
        this.ret = new Array<any>();
    }

    /**
     * 追加一段文本，非字符串类型，会被转为字符串处理
     *
     * @param obj {any} 文本片段
     * @returns {StringBuilder} this
     */
    append(obj: any): StringBuilder {
        this.ret.push(obj);
        return this;
    }

    /**
     * 追加一个数字
     *
     * 允许预设长度，如果不足则自动补 0
     *
     * @param num 数字或字符串
     * @param len 期望结果长度
     * @returns 填充后的字符串
     */
    appendNumber(num: number | string, len: number): string {
        const str = num.toString();
        const paddingLength = len - str.length;

        if (paddingLength <= 0) return this.append(str);
        if (paddingLength === 1) return this.append('0').append(str);
        if (paddingLength === 2) return this.append('00').append(str);

        return this.append(`${Array(paddingLength).fill(0).join('')}${str}`);
    }

    /**
     * 构建一个字符串
     *
     * @returns {string} 拼接出来的字符串
     */
    build(): string {
        return this.ret.join('');
    }

    /**
     * 构建一个字符串
     *
     * @returns {string} 拼接出来的字符串
     */
    toString(): string {
        return this.ret.join('');
    }
}

export default StringBuilder